<?php
App::uses('AppController', 'Controller');
/**
 * LeiturasM02s Controller
 *
 * @property LeiturasM02 $LeiturasM02
 * @property PaginatorComponent $Paginator
 * @property SessionComponent $Session
 */
class LeiturasM02Controller extends AppController {

/**
 * Components
 *
 * @var array
 */
	public $components = array('Paginator', 'RequestHandler');

/**
 * index method
 *
 * @return void
 */
	public function pesquisador_index($estacaoId = null) {
		if (!$this->LeiturasM02->Estacao->exists($estacaoId)) {
			throw new NotFoundException('Estação inválida!');
		}

		$pesquisar=array('LeiturasM02.estacao_id' => $estacaoId);

		$this->LeiturasM02->recursive = 0;
		$this->set('leiturasM02', $this->Paginator->paginate('LeiturasM02', $pesquisar));

		$this->setEstacaoData($estacaoId);
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function pesquisador_view($sequencia = null, $estacaoId = null, $hora = null) {
		$hora = str_replace('|',':',$hora);
		if (!$this->LeiturasM02->exists(array('sequencia' => $sequencia, 'hora' => $hora, 'estacao_id' => $estacaoId))) {
			throw new NotFoundException('Leitura inválida!');
		}
		$options = array('conditions' =>
			array(
				'sequencia' => $sequencia,
				'hora' => $hora,
				'estacao_id' => $estacaoId
			)
		);

		$this->set('leiturasM02', $this->LeiturasM02->find('first', $options));

		$this->setEstacaoData($estacaoId);
	}

/**
 * add method
 *
 * @return void
 */
	public function colaborador_add($estacaoId = null) {
		if (!$this->LeiturasM02->Estacao->exists($estacaoId)) {
			throw new NotFoundException('Estação inválida!');
		}

		if ($this->request->is('post')) {
			$this->LeiturasM02->create();
			$data = $this->request->data['LeiturasM02'];
			$dateTime = $this->LeiturasM02->deconstruct('hora', $data['hora']);

			$data['estacao_id'] = $estacaoId;
			$data['sequencia'] = $this->getNumSequencia($data['estacao_id'], $dateTime);
			if ($this->LeiturasM02->save($data)) {
				$this->Session->setFlash('Leitura adicionada com sucesso!');
				return $this->redirect(array('action' => 'index', 'pesquisador' => true, $estacaoId));
			} else {
				$this->Session->setFlash('Erro ao adicionar leitura!');
			}
		}

		$this->setEstacaoData($estacaoId);
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function colaborador_edit($sequencia = null, $estacaoId = null, $hora = null) {
		$hora = str_replace('|',':',$hora);
		if (!$this->LeiturasM02->exists(array('sequencia' => $sequencia, 'hora' => $hora, 'estacao_id' => $estacaoId))) {
			throw new NotFoundException('Leitura inválida!');
		}

		$conditions = array(
					'sequencia' => $sequencia,
					'hora' => $hora,
					'estacao_id' => $estacaoId
				);

		if ($this->request->is(array('post', 'put'))) {
			$this->request->data['LeiturasM02'] = array_merge($this->request->data['LeiturasM02'], $conditions);

			if ($this->LeiturasM02->save($this->request->data)) {
				$this->Session->setFlash('Leitura editada com sucesso!');
				return $this->redirect(array('action' => 'index', 'pesquisador' => true, $estacaoId));
			} else {
				$this->Session->setFlash('Erro ao editar leitura!');
			}
		} else {
			$this->request->data = $this->LeiturasM02->find('first', array('conditions' => $conditions));
		}

		$this->setEstacaoData($estacaoId);
	}

/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function colaborador_delete($sequencia = null, $estacaoId = null, $hora = null) {
		$hora = str_replace('|',':',$hora);
		if (!$this->LeiturasM02->exists(array('sequencia' => $sequencia, 'hora' => $hora, 'estacao_id' => $estacaoId))) {
			throw new NotFoundException('Leitura inválida!');
		}
		$this->request->onlyAllow('post', 'delete');

		$conditions = array(
					'sequencia' => $sequencia,
					'hora' => $hora,
					'estacao_id' => $estacaoId
				);

		if ($this->LeiturasM02->deleteAll($conditions, false)) {
			$this->Session->setFlash('Leitura deletada com sucesso!');
		} else {
			$this->Session->setFlash('Erro ao deletar leitura!');
		}
		return $this->redirect(array('action' => 'index', $estacaoId));
	}

    private function getNumSequencia($estacaoId, $date) {
		$leituras = $this->LeiturasM02->find('first',
			array(
				'conditions' => array(
					'hora'			=> $date,
					'estacao_id'	=> $estacaoId
				),
				'order' => array(
					'sequencia' => 'DESC'
				)
			)
		);

		if (count($leituras) > 0)
			$sequencia = intval($leituras['LeiturasM02']['sequencia']) + 1;
		else
			$sequencia = 1;

		return $sequencia;
    }

    private function setEstacaoData($estacaoId) {
    	$estacao = $this->LeiturasM02->Estacao->find('first',
    		array(
    			'fields' => array('id', 'nome'),
    			'conditions' => array('id' => $estacaoId)
    			)
    		);

    	$this->set('estacao', $estacao['Estacao']);
    }

    public function pesquisador_export() {
    	$this->request->onlyAllow('post');

    	$requestData = $this->request->data['LeiturasM02'];
    	
    	$data = $this->LeiturasM02->find('all', array('conditions' =>
	    		array(
	    			'estacao_id' => $requestData['estacao_id'],
	    			'hora BETWEEN ? AND ?' => array($requestData['startDate'], $requestData['endDate'])
	    		),
    			'recursive' => -1
    		)
    	);

    	if ($data == null) {
    		$this->Session->setFlash('Nenhuma leitura foi encontrada neste intervalo!');
    		return $this->redirect(array('action' => 'index', $requestData['estacao_id']));	
    	}

		$this->set(compact('data'));
    }
}
